class VeriTabani {

	// kendisine ayni anda ancak 1 tane baglanti veriyor
	public void baglantiVer() {
	};

	public void baglantiKopart() {
	};

}

class Uygulamalar extends Thread {

	Semaphore s;
	VeriTabani vt;

	public Uygulamalar(Semaphore s, VeriTabani vt) {
		this.s = s;
		this.vt = vt;

	}

	public void run() {

		s.eleGecir(); // dikkat
		vt.baglantiVer(); // kiritik alan

		// .. gerekli calismayi yap
		try {
			sleep(10000);
		} catch (InterruptedException iEx) {
			// bosver
		}
		vt.baglantiKopart();
		s.birak(); // dikkat
	}
}

public class SemaphoreTest {

	Semaphore s;

	public SemaphoreTest(int sayi) {

		VeriTabani vt = new VeriTabani();
		Semaphore s = new Semaphore(sayi);

		Uygulamalar u1 = new Uygulamalar(s, vt);
		Uygulamalar u2 = new Uygulamalar(s, vt);
		Uygulamalar u3 = new Uygulamalar(s, vt);
		Uygulamalar u4 = new Uygulamalar(s, vt);

		u1.start();
		u2.start();
		u3.start();
		u4.start();
	}

	public static void main(String args[]) throws Exception {
		SemaphoreTest s = new SemaphoreTest(2); // 61
	}
}
